#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main(){
  cout << 4430091 << endl;
}
// int main()
// {
//   int ans = 0;
//   stack<int> st;
//   for(int i = 1;i < 100000000;i++){
//     string str = to_string(i);
//     int a = str.size();
//     if(a % 2 == 1) continue;
//     int b = 0,c = 0;
//     for(int j = 0;j < a;j++){
//       if(j *2 < a){
//         b += str[j] - '0';
//       }else{
//         c += str[j] - '0';
//       }
//     }
//     if(b == c){
//       // cout << str << endl;
//       ans++;
//     }
//   }
//   cout << 1 << endl;
//   cout << ans << endl;
//   return 0;
// }
#include <iostream>
using namespace std;
using ll = long long;
ll arr[11];

ll ans = 0;
void dfs(int pos,int s){
  if(s == 70) ans++;
  if(pos == 31) return;
  if(s == 100) return;
  dfs(pos + 1,s + 10);
  dfs(pos + 1,0);
}
int main()
{
  // arr[0] = 1;
  // for(int i = 1;i <= 30;i++){
  //   arr[0]++;
  //   for(int i = 1;i <= 9;i++){
  //     arr[i] += arr[i - 1];
  //     arr[0] += arr[i - 1];
  //   }
  // // }
  // dfs(1,0);
  // cout << ans << endl;
  cout << 8335366 << endl;
  return 0;
}
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;


string mlu(string &str,char c){
  string res;
  int cnt = 0;
  for(int i = str.size() - 1;i >= 0;i--){
    int tmp = (c - '0') * (str[i] - '0') + cnt;
    cnt = tmp/10;
    res += (tmp % 10) + '0';
  }
  if(cnt != 0){
    res += cnt + '0';
  }
  reverse(res.begin(),res.end());
  return res;
}
string add(string &a,string &b){
  string res;
  int n = a.size() - 1,m = b.size() - 1;
  int cnt = 0;
  while(n >= 0 || m >= 0){
    int tmp = 0;
    if(n >= 0){
      tmp += a[n] - '0';
      n--;
    }
    if(m >= 0){
      tmp += b[m] - '0';
      m--;
    }
    tmp += cnt;
    cnt = tmp/10;
    res += (tmp % 10) + '0';
  }
  if(cnt != 0){
    res += cnt + '0';
  }
  // cout << res  << endl;
  reverse(res.begin(),res.end());
  return res;
}
string sqrt(string& str){
  string res;
  int cnt = 0;
  for(int i = str.size() - 1;i >= 0;i--){
    string tmp = mlu(str,str[i]);
    for(int j = 0;j < cnt;j++){
      tmp.push_back('0');
    }
    //cout << tmp <<' ';
    res = add(res,tmp);
    cnt++;
    // cout << res << endl;
  }
  return res;
}
string sub(string a,string b){
  string ans;
  bool t = false;
  if(a == b) return "0";
  int n = a.size(),m = b.size();
  if((n < m) || (n == m && b > a) ) t = true,swap(a,b);
  n = a.size() - 1,m = b.size() - 1;
  int cnt = 0;
  while(n >= 0 || m >= 0){
    int tmp = 0;
    if(n >= 0){
      tmp += a[n] - '0';
      n--;
    }
    if(m >= 0){
      tmp -= b[m] - '0';
      m--;
    }
    tmp += cnt;
    if(tmp < 0) tmp +=10,cnt = -1;
    else cnt = 0;
    ans += (tmp % 10) + '0';
  }
    while(ans.back() == '0') ans.pop_back();
    if(t) ans.push_back('-');
    reverse(ans.begin(),ans.end());
    return ans;
}
int main()
{
  string A,B; 
  cin >> A;
  cin >> B;
  if(A[0] == '-') A.erase(0,1);
  if(B[0] == '-') B.erase(0,1);
  cout << sub(sqrt(A) , sqrt(B));;
  return 0;
}
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
  string str;
  long long ans = 0;
  cin >> str;
  int n = str.size();
  for(int i = 0;i < n;i++){
    string tmp;
    tmp += str[i];
    for(int j = i + 1;j < n;j++){
      tmp += str[j];
      int pos1 = i,pos2 = tmp.size() - 1;
      while(pos2 >= 0){
        if(tmp[pos2] == str[pos1]){
          pos2--,pos1++;
        }else if(tmp[pos2] > str[pos1]){
          break;
        }else{
          ans++;
          // cout  << tmp << endl;
          break;
        }
      }
    }
  }
  cout << ans << endl;
  return 0;
}
// 21
// 210
// 2101
// 21010
// 210102
// 10
// 1010
// 10
// 8
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int c[200005];
int f[200005];
vector<vector<int>> arr(200005);
vector<map<int,int>> window(200005);
int ans = 0;
void dfs(int pos){
  // cout << pos << endl;
  if(!window[pos].empty()) return;
  for(int a : arr[pos]){
    dfs(a);
    for(auto & e : window[a]){
      window[pos][e.first] += e.second;
    }
  }
  window[pos][c[pos]]++;
  int cnt = 0;
  for(auto& e : window[pos]){
      if(cnt == 0) cnt = e.second;
      if(cnt != e.second) return; 
  }
  ans++;
  // cout << pos << endl;
}
int main()
{
  int n;  cin>>n;
  int c,f;
  for(int i = 1;i <= n;i++){
    cin>> c[i] >> f[i];
    arr[f[i]].push_back(i);
  }
  dfs(1);
  cout << ans << endl;
  return 0;
}
// 5
// 6
// 3
// 1
// 4
#include <iostream>
using namespace std;
using ll = long long;
ll arr[32];
ll n,m;
int ans = 100;
void dfs(int pos,int cnt,ll sum){
  if(cnt >= ans) return;
  if(sum == m) {
    ans = min(ans,cnt);
    return;
  }
  if(pos > n || sum > m) return;
  dfs(pos + 1,cnt,sum + arr[pos]);
  dfs(pos + 1,cnt + 1,sum + arr[pos]/2);
  dfs(pos + 1,cnt,sum);
}
int main()
{
  ios::sync_with_stdio(false); 
  cin.tie(0),cout.tie(0);
  ll sum = 0;  cin >> n >> m;
  m *= 2;
  for(int i = 1;i <= n;i++){
    cin >> arr[i];
    arr[i] *= 2;
    sum += arr[i];
  }
  if(sum < m){
    cout << -1 << endl;
    return 0;
  } 
  dfs(1,0,0);
  if(ans == 100) ans = -1;
  cout << ans << endl;
  return 0;
}